
// 布尔值  boolean 变量名：数据类型=值
let flag:boolean = true
console.log(flag);

// 数字 number
let a1:number = 10 //十进制
console.log(a1);

// 字符串 string
let str:string = '黄河之水天上来' //十进制
console.log(`${str}`);

// 字符串和数字之间拼接
let age1: number = 18
let name1: string = '李三'
console.log(age1+name1);

// underfined和null
//underfined和null可以当作其他类型的子类型,可以把这二个赋值给其他类型的变量,严格模式下会显示错误
let und:undefined = undefined
let nll:null =null
console.log(und)
console.log(nll);

// 数组类型
    // 数组定义方式1
    let arr1:number[] = [10,11]
    //数组定义方式2：泛型的写法
    let arr2:Array<number>= [10,11]

    // ***注意问题：数组定义后里面的数据的类型必须和定义数组的时候类型一致，否则有错误，也不会编译通过

// 元组类型
    //定义数组的时候类型和数据的个数一开始就已经限定了
let arr3:[string,number,boolean] = ['小盖盖',100,false]
 // ***注意问题：元组类型在使用的时候数据的类型位置和数据的个数，应该和在定义元组的时候数据类型及位置是一致的
 //元组类型的数据类型具有当前类型的对应数据类型方法 如 arr3[0].split('')
 
// 枚举
 //每个数据值都可以叫元素，元素值有自己的编号，从0开始
enum Color{
    red=10,
    blue=100
}
//定义一个color的枚举类型的变量来接受枚举的值
let color:Color =Color.red

//  any类型
let str23:any = 100
str23='你好啊'
console.log(str23);
let arr12:any[] = [100,'哟哟',true]
    //any类型在下面这种情况下没有错误的提示信息,也有缺点 
console.log(arr12[0].split(''));

// void  
//在函数申明的时候小括号后面写void，代表该函数没有任何的返回值
//当一个函数没有返回值的时候为void
function showMsg():void{
    console.log('你好吃了嘛');
}
console.log(showMsg());//underfined


// object 类型
function userObj(obj:object):object{
    console.log(obj)
    return{
        name:'li',
        age:'123'
    }  
}
console.log(userObj({name:'李世明',age:'男'}))

// 联合类型
//表示取值可以为多种类型中的一种
//需求1:定义一个函数得到一个数字或字符串值的字符串形式值
function getString(str:number|string):string{
    return str.toString()
}
console.log(getString(123));//123         

//需求2:定义一个函数得到一个数字或字符串值的长度

function getString1(str:number|string):number{
    if((<string>str).length){
        return (<string>str).length
    }else{
        return str.toString().length
    }
}
console.log(getString1(123));//3

//  断言类型  
// 告诉编译器我是什么类型
function getStrin2(str:number|string):number{
    if((<string>str).length){
        return (<string>str).length
    }else{
        return str.toString().length
    }
}
console.log(getStrin2(123));//3
// 方式1、 <类型>变量名
// 方式2、as  如 str as string 

// 类型推断
//   在米有明确的指定类型的时候会推测出一个类型